var crypto = require('crypto');
var RUtil = require('./dataformatUtil');
var apinfo = require('../models/apinfo');
var config = require('../config');
var sd = require('silly-datetime');
// 加载编码转换模块
var fs=require('fs');
var splitstr='${sp}';
var companyname="dy";
var outputpath = "outputpath";

var apbi_filetype="apbi";
var apbi_filename ="";
var shxx_filetype="shxx";
var shxx_filename="";
var xnsf_filetype="xnsf";
var xnsf_filename="";

var appjson="app-20170927.json";
var appjsonresult=JSON.parse(fs.readFileSync( appjson));
var keywordjson="keyword-20170927.json";
var keywordjsonresult=JSON.parse(fs.readFileSync( keywordjson));

var http = require('http');
var config = require('../config');


var io = require('socket.io-client');
var socket=io('http://'+config.static_host+':'+config.static_port);//与服务器进行连接
var onlinetime=sd.format(new Date(), 'YYYYMMDDHHmmss');

var heartbeatschedule = require("node-schedule");
var heartbeatrule     = new heartbeatschedule.RecurrenceRule();
var heartbeattimes = [];
for(var i=0; i<60; i++){
    heartbeattimes.push(i);
}
heartbeatrule.minute  = heartbeattimes;

exports.processHeartbeat=function(deviceid, macAddress){
    heartbeatschedule.scheduleJob(heartbeatrule, function(){
        var position="";
        if(typeof(position)=="string" && position!='' && position.indexOf(' ')>0){
            position=position.split(' ');
        }else{
            position='';
        }
        console.info('begin send heartbeat....');
        //写心跳文件
        data=onlinetime+splitstr
            + splitstr
            + deviceid + splitstr
            + config['devicetype'] +splitstr
            + macAddress.replace(/-/g,':').toLowerCase() + splitstr
            + (typeof(position)=="object"  && position.length>=2?position[1]:'') + splitstr
            + (typeof(position)=="object"  && position.length>=1?position[0]:'') + splitstr
            + config['version'] ;

        socket.emit('heartbeat', data);
    });
}

exports.process = function( deviceid, mac){
    try{
        console.log(socket);
        console.info('begin generateFile....');
        processData(deviceid, mac);
    }
    catch(e){
        console.log("err: "+e);
    }
};

function processData(deviceid, mac) {
    try{
        var recorddata="";
        var recorditem="";

        var currenttime=sd.format(new Date(), 'YYYYMMDDHHmmss');
        var apinfosql="select * from apinfo";
        var stainfosql="select * from stainfo";
        var sqlite3 = require("sqlite3").verbose();
        var db = new sqlite3.Database(config.apstadatapath);
        db.serialize(function() {
            console.info("开始生成 MAC终端扫描记录shxx文件... ...");
            //1.1. MAC终端扫描记录文件
            db.all(stainfosql,function(err,res){
                if(!err){
                    /*CATCHTIME	采集时间	是	格式为YYYYMMDDHHMISS
                     EQUIPID	设备ID	是	8位以内的数字设备ID
                     SSID	服务集标识	是
                     MAC	终端MAC地址	是
                     RSSI	场强	是
                     LONGITUDE	经度
                     LATITUDE	纬度
                     SEQ	序号	是	序号从1开始，每条自增1，每天0点序号重新置为1
                     */
                    shxx_filename="WIFI-"+currenttime+"-"+shxx_filetype+"-"+companyname
                        +"-"+deviceid+"-"+mac+".dat";
                    for(var iloop=0; iloop < res.length; iloop++){
                        recorddata=res[iloop];
                        var position=recorddata.position;
                        if(typeof(position)=="string" && position!='' && position.indexOf(' ')>0){
                            position=position.split(' ');
                        }else{
                            position='';
                        }

                        recorditem=recorddata.time + splitstr
                            + deviceid +splitstr
                            + recorddata.essid + splitstr
                            + recorddata.s_mac + splitstr
                            + recorddata.signal  + splitstr
                            + (typeof(position)=="object"  && position.length>=2?position[1]:'') + splitstr
                            + (typeof(position)=="object"  && position.length>=1?position[0]:'') + splitstr
                            ;
                        // console.info(recorditem);
                        writeFile(outputpath+"/"+shxx_filename, shxx_filetype, recorditem);
                    }
                }
                else
                {
                    console.log(err);
                }
            });

            //1.2 处理完成后清空数据库,测试时先屏蔽
            //db.run("delete from stainfo");

            //2.1 扫描AP热点信息文件
            console.info("开始生成 扫描AP热点信息apbi文件... ...");
            db.all(apinfosql,function(err,res){
                if(!err){
                    /*CATCHTIME	采集时间	是	设备捕获的采集时间，格式为：YYYYMMDDHHMISS
                     EQUIPID	设备ID	是
                     DEVICENAME	设备名称		AP设备名
                     SSID	SSID		AP SSID
                     MAC	MAC地址	是	AP MAC地址
                     LONGITUDE	经度
                     LATITUDE	纬度
                     RSSI	场强	是	AP的场强
                     ENCWAY	加密方式	是	AP的加密方式
                     CHANNEL	信道号	是	AP所使用的信道
                     */
                    apbi_filename="WIFI-"+currenttime+"-"+apbi_filetype+"-"+companyname
                        +"-"+deviceid+"-"+mac+".dat";
                    for(var iloop=0; iloop < res.length; iloop++){
                        recorddata=res[iloop];
                        var position=recorddata.position;
                        if(typeof(position)=="string" && position!='' && position.indexOf(' ')>0){
                            position=position.split(' ');
                        }else{
                            position='';
                        }

                        recorditem=recorddata.time + splitstr
                            + deviceid +splitstr
                            + recorddata.device_name + splitstr
                            + recorddata.essid + splitstr
                            + recorddata.s_mac + splitstr
                            + (typeof(position)=="object" && position.length>=2?position[1]:'') + splitstr
                            + (typeof(position)=="object" && position.length>=1?position[0]:'') + splitstr
                            + recorddata.signal  + splitstr
                            + recorddata.en_mode + splitstr
                            + recorddata.channel + splitstr ;
                        // console.info(recorditem);
                        writeFile(outputpath+"/"+apbi_filename, apbi_filetype,  recorditem);
                    }
                }
                else
                {
                    console.log(err);
                }
            });

            //2.2. 处理完成后清空数据库,测试时先屏蔽
            //db.run("delete from apinfo");
        });

        var dpidb = new sqlite3.Database(config.dpidatapath);
        var sekeysql="select * from sekey";
        dpidb.serialize(function() {
            //3.1. 虚拟身份信息文件
            console.info("开始生成 虚拟身份信息文件xnsf文件... ...");
            dpidb.all(sekeysql,function(err,res){
                if(!err){
                    /*CATCHTIME	采集时间	是	格式为：YYYYMMDDHHMISS
                     EQUIPID	设备ID	是	8位以内的数字设备ID
                     MAC	终端MAC地址	是
                     MAIN_TYPE	类型	是	主类型，主要是指身份来源，如腾讯视频等，注意该字段不为编号代号而是实际的类型字符串
                     SUB_TYPE	子类型	是	如腾讯视频下的QQ账号，注意该字段不为编号代号而是实际的类型字符串
                     TYPE_VALUE	类型值	是
                     LONGITUDE	经度
                     LATITUDE	纬度
                     SEQ	序号	是	序号从1开始，每条自增1，每天0点序号重新置为1
                     */
                    xnsf_filename="WIFI-"+currenttime+"-"+xnsf_filetype+"-"+companyname
                        +"-"+deviceid+"-"+mac+".dat";
                    for(var iloop=0; iloop < res.length; iloop++){
                        recorddata=res[iloop];
                        //console.log(recorddata)
                        var position=recorddata.position;
                        if(typeof(position)=="string" && position!='' && position.indexOf(' ')>0){
                            position=position.split(' ');
                        }else{
                            position='';
                        }

                        var main_type = appjsonresult.filter(function(item,index,array){   //返回数组，filter函数获取满足条件的项
                            return (item.app_id==recorddata.app_id);
                        });
                        if(typeof(main_type)!="undefined" && main_type.length!=0){
                            main_type=main_type[0].ch_name;
                        }
                        else{
                            main_type="";
                        }
                        var sub_type=keywordjsonresult.filter(function(item,index,array){   //返回数组，filter函数获取满足条件的项
                            return (item.typeid==recorddata.keytype);
                        });
                        if(typeof(sub_type)!="undefined" && sub_type.length!=0){
                            sub_type=sub_type[0].desc;
                        }
                        else{
                            sub_type="";
                        }
                        var type_value=recorddata.keyword;
                        if(recorddata.urlencode>0 && typeof(type_value)!="undefined" && type_value!=""){
                            type_value=unescape(decodeURIComponent(type_value));
                        }
                        else{
                            type_value="";
                        }

                        recorditem=currenttime + splitstr
                            + deviceid   + splitstr
                            + (recorddata.mac).toLowerCase() + splitstr
                            + main_type  + splitstr
                            + sub_type   + splitstr
                            + type_value + splitstr
                            + (typeof(position)=="object" && position.length>=2?position[1]:'') + splitstr
                            + (typeof(position)=="object" && position.length>=1?position[0]:'') + splitstr
                            ;
                        // console.info(recorditem);
                        writeFile(outputpath+"/"+xnsf_filename, xnsf_filetype, recorditem);
                    }
                }
                else
                {
                    console.log(err);
                }
            });

            //3.2 处理完成后清空数据库,测试时先屏蔽
            //dpidb.run("delete from sekey");
        });

    }
    catch(e){
        console.log("err: "+e);
    }
}

function writeFile(file, type, recorditem){
    socket.emit(type, recorditem);
}
